package com.cyedu.tsapp.utils;

import java.util.*;

/**
 * 编码生成器
 * 
 * @author Dun
 */
public class CodeUtils {

	// 三十六进制Model
	private static char[] model_36 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'R', 'E', 'J', 'K', 'M', 'L', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
			'V', 'W', 'X', 'Y', 'Z' };

	// 十进制Model
	private static char[] model_10 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

	/**
	 * 获取当前时间戳(精确到秒) + 指定长度整形字符串 (十进制)
	 * 
	 * @author Dun
	 * @param length
	 * @return
	 */
	public static String getTimeCodeByLength(int length) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		while (sb.length() < length) {
			sb.append(model_10[Math.abs(random.nextInt()) % 10]);
		}
		String res = System.currentTimeMillis() + sb.toString();
		return res;
	}

	/**
	 * 获取指定长度随机整形字符串 (十进制)
	 * 
	 * @author Dun
	 * @param length
	 * @return
	 */
	public static String getCodeByLength(int length) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		while (sb.length() < length) {
			sb.append(model_10[Math.abs(random.nextInt()) % 10]);
		}
		return sb.toString();
	}

	/**
	 * 获取指定长度随机整形字符串 (三十六进制)
	 * 
	 * @author Dun
	 * @param length
	 * @return
	 */
	public static String getCodeByLength_36(int length) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		while (sb.length() < length) {
			sb.append(model_36[Math.abs(random.nextInt()) % 36]);
		}
		return sb.toString();
	}

	/**
	 * 生成随机6位码 (三十六进制)
	 * 
	 * @return String
	 * @author: zhaodun
	 * @date: 2015年10月30日 下午7:19:14
	 */
	public static String createCode() {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		while (sb.length() < 6) {
			sb.append(model_36[Math.abs(random.nextInt()) % 36]);
		}
		return sb.toString();
	}

	/**
	 * 获取不重复Code,需要传入比较对象Set (三十六进制)
	 * 
	 * @param set
	 * @return String
	 * @author: zhaodun
	 * @date: 2015年10月30日 下午4:25:24
	 */
	public static String createUniquenessCode(Set<String> set) {
		String code = createCode();
		if (!set.contains(code)) {
			return code;
		} else {
			return createUniquenessCode(set);
		}
	}

	/**
	 * 获取指定数量不重复Code Set集 (三十六进制)
	 * 
	 * @param set
	 * @param number
	 * @return Set<String>
	 * @author: zhaodun
	 * @date: 2015年10月30日 下午7:18:18
	 */
	public static List<String> createUniquenessCodeSet(Set<String> set, int number) {
		Set<String> temSet = new HashSet<String>();
		while (temSet.size() < number) {
			temSet.add(createUniquenessCode(set));
		}
		List<String> list = new ArrayList<String>();
		for (String s : temSet) {
			list.add(s);
		}
		return list;
	}

	/**
	 * 获取时间戳(秒)加随机字符串 (32位)
	 * 
	 * @author Dun
	 * @return
	 */
	public static String get32TimeCode() {
		return System.currentTimeMillis() / 1000 + getCodeByLength_36(19);
	}

	/**
	 * 获取时间戳(毫秒)加指定长度字符串
	 * 
	 * @author Dun
	 * @return
	 */
	public static String getTimeCode(int length) {
		return System.currentTimeMillis() + getCodeByLength_36(length == 0 ? 1 : length);
	}

	/**
	 * 获取UUID
	 * @return String
	 * @author Dun
	 * 2016年9月22日 下午4:52:20
	 */
	public static String getUUID32() {
		String s = UUID.randomUUID().toString();
		return s.substring(0, 8) + s.substring(9, 13) + s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
	}

//	public static void main(String[] args) {
//		System.out.println();
//	}
}
